/********************************************************************************************************************************
 * 《C ++ Primer》第五版中文版，读书笔记：按照书中的的示例源码和每一个小章节的课后习题，自己动手写代码实现，作为联系和测试。
 * Date: 2024-04-02 17:22
 * Author: dimon.chen 
 * EMali: 1181302388@qq.com 
 * 
 * 章节: 第三章 字符串，向量和数组
 *       3.4 迭代器介绍
 * 
 ********************************************************************************************************************************/


#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::vector;

int main(int argc, char *argv[])
{
    ///
    /// 练习3.4.2 
    /// 练习3.24 使用迭代器重做3.3.3节最后一个练习
    ///
    vector<int> v1;
    for(int i = 0; i<10; i++)
        v1.push_back(i);

    auto beg = v1.begin();
    auto end = v1.end();
    while(beg != end){
        *beg = (*beg) * (*beg);
        beg += 1;
    }
    for(auto c : v1)
        cout << c << " ";
    cout << endl;


    ///
    /// 练习3.4.2 
    /// 练习3.25 3.3.3 节划分分数段的程序时使用下标运算符实现的，请利用迭代器改写该程序
    ///
    unsigned grade;
    vector<unsigned> result;
    vector<unsigned> scores(11);
    while(cin >> grade){
        result.push_back(grade);
    }

    for(auto it = result.begin(); it != result.end(); it++){
        if(!(*it <= 100))
            continue;

        decltype(scores.size()) idx = (*it)/10;

        cout << idx << " grade" << *it << endl;
        *(scores.begin() + idx) += 1;
    }

    for(auto c : scores)
        cout << c << " ";
    cout << endl;


    return 0;
}